c/c++常见类型转换错误 |
您所在的位置:网站首页 › c语言 强制类型转换 › c/c++常见类型转换错误 |
文章目录
char转int 高位符号扩展有符号int与无符号int比较关于一个bit的位域变量的取值范围临时变量溢出size_t死循环
char转int 高位符号扩展
int main() {
char a = 0x9A;
int util;
util = (int)a;
cout
std::cout
std::cout
int d = -1;
int array[] = {23, 23, 23};
cout
cout 23, 23, 23};
cout
cout
return 1;
}
int main() {
xxdata test;
test.flag = status();
if (test.flag == 1) {
cout
int flag: 1;
int other: 31;
} xxdata;
int status() {
return -1;
}
int main() {
xxdata test;
test.flag = status();
if (test.flag == -1) {
cout
long score;
score = m * n;
return score;
}
在64位操作系统下,int型通常占4个字节,long型通常占8个字节,两个int型变量相乘的值范围是long型变量的值范围。score=m*n 这行代码在执行时,m和n相乘的结果会先存储在一个临时的int变量中,然后再赋值给long变量score,这个临时变量是很容易溢出的。所以,需要在表达式运算前先对m和n做数据类型转换。 正确做法: long mul(int m, int n) { long score; score = static_cast(m) * static_cast(n); return score; }对隐式的类型转换,一般来说向上是安全的,向下会出现数据截断丢失,导致数据错误。事实上,上述正确代码只在long型字节数是int型字节数两倍的情况下才是正确的,如果在某些平台下,long 型和int 型字节数一样的话(如32 位操作系统int型和long型通常都占4个字节),仍然需要注意两个int型相乘结果溢出的问题。 size_t死循环 int main() { size_t size = sizeof(int); cout if (size == 0) break; }2、使用int替代size_t |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |